home *** CD-ROM | disk | FTP | other *** search
- BUFLEN EQU 32768 ; buffer length, alter to taste
-
- CR EQU 0DH ; ASCII carriage return
- LF EQU 0AH ; ASCII line feed
-
- ; DOS 2.x pre-defined handles
- STDIN EQU 0 ; standard input file
- STDOUT EQU 1 ; standard output file
- STDERR EQU 2 ; standard error file
-
- CSEG SEGMENT PARA PUBLIC 'CODE'
-
- ASSUME CS:CSEG,DS:CSEG
-
- ORG 100H ; start .COM at 100H
-
- MLU:
- MLU3: MOV AH,3FH ; read standard input.
- MOV BX,STDIN
- MOV CX,BUFLEN
- MOV DX,OFFSET (BUFFER)
- INT 21H
- JC MLU4 ; JUMP, ERROR.
- MOV NCHAR,AX ; save length of read.
- CMP AX,0 ; nothing read in?
- JNE MLU4A ; if not end of file, skip exit.
- MLU4:
- MOV AX,4C00H ; exit with return code=0.
- INT 21H
- MLU4A: MOV SI,OFFSET (BUFFER)
- MOV DI,SI
- MOV CX,NCHAR
- MLU5: LODSB
- CMP AL,CR
- JZ TURNOF
- CMP AL,';'
- JZ TURNON
- CMP AL,'"'
- JZ TOGGLE
- CMP AL,"'"
- JZ TOGGLE
- CMP BYTE PTR MODE,0
- JNZ NOMASK
- CMP AL,'A'+32
- JC NOMASK
- CMP AL,'Z'+33
- JNC NOMASK
- AND AL,5FH
- NOMASK: STOSB
- LOOP MLU5
- JMP MLU4B
- TOGGLE: CMP BYTE PTR MODE,';'
- JZ NOMASK
- CMP BYTE PTR MODE,0
- JZ SETIT
- CMP MODE,AL
- JNZ NOMASK
- SETIT: XOR MODE,AL
- JMP NOMASK
- TURNON: CMP BYTE PTR MODE,0
- JNZ NOMASK
- MOV MODE,AL
- JMP NOMASK
- TURNOF: MOV BYTE PTR MODE,0
- JMP NOMASK
- MLU4B: MOV AH,40H ; now write to standard output...
- MOV BX,STDOUT
- MOV CX,NCHAR
- MOV DX,OFFSET (BUFFER)
- INT 21H
- JC MLU7 ; jump, write failed.
- CMP AX,NCHAR
- JNE MLU7 ; jump, write failed.
- JMP MLU3 ; read again until end of file.
-
- MLU7: MOV DX,OFFSET ERR2 ; print "Disk is full".
- MOV CX,OFFSET ERR2LEN
- MOV AH,40H ; display error message and exit.
- MOV BX,STDERR
- INT 21H
- MOV AX,4C02H
- INT 21H
- NCHAR DW 0 ; number of chars actually input.
- MODE DB 0 ; current mode indicator
-
- ERR2 DB CR,LF
- DB 'tee: Disk is full.'
- DB CR,LF
- ERR2LEN EQU (THIS BYTE)-(OFFSET ERR2)
-
- BUFFER LABEL BYTE ; data is read here from
- ; standard input
-
- CSEG ENDS
-
- END MLU
- N EQU (THIS BYTE)-(OFFSET ERR2)
-
- BUFFER LABEL BYTE ; data is read here from
- ; standard input
-
- CSEG END